<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>null和undefined</title>
</head>

<body>
  <script>
    //  undefined出现原因：(口诀：一变量二函数一对象)
    // 1.变量被声明了但是没赋值时
    let a
    console.log(a);
    // 2.调用函数时，应该提供的参数没提供，则该参数为undefined
    function fn1(a) {
      return a
    }
    let d = fn1()
    console.log(d);
    console.log(RegExp.valueOf());
    // 3.函数没有返回值时，默认返回undefined
    function fn() {
      let d = 'wct'
    }
    let c = fn()
    console.log(c);
    // console.log(c.valueOf());
    // 4.对象里没有赋值的属性
    let b = { a }
    console.log(b.a);

    // null：
    // （1）作为函数的参数，来表示该函数的参数不是对象
    function greetObject(who) {
      if (!who) {
        return null;
      }
      return { message: `Hello, ${who}!` };
    }
    console.log(greetObject());
    // => nul
    // （2）作为对象原型链的终点
    console.log(Object.getPrototypeOf(Object.prototype));

    // null和undefined之间的主要区别是，null表示丢失的对象，而undefined表示未初始化的状态。

    // JavaScript里的规定，null只和undefined相等，和其他比较都是false
    console.log(false == null);//false
    console.log(false == undefined);//false
    console.log(null == undefined);//false
    console.log('' == 0);
    console.log(false == 0);
    console.log(false == '');
    console.log(false == []);
    // 转换字符串
    console.log(String(null));
    // console.log(undefined.toString());// 报错  toString()除了undefined和null都可以

    let n = 123456.78
    console.log(n.toExponential(4));
    console.log(n.toPrecision(6));

  </script>
</body>

</html>